/*
 * Route.h
 *
 *  Created on: Dec 21, 2011
 *      Author: dzm
 */

#include <fstream>

#include "NetworkUtil/SocketWrite.h"
#include "Packet.h"
#include "RSA.h"

#ifndef ROUTE_H_
#define ROUTE_H_

class Route {
public:
	Route();
	virtual ~Route();

	void set( Node & );

//处理输入数据，转发的函数，输出为一个接口out_port(源发包的情况)
	int processFlow(Packet p);

//处理输入数据，转发的函数，输出为一个接口out_port(中间节点发包的情况)
	int processFlow(Packet & p, unsigned short inport, bool isSegArrived);

//处理输入数据，转发的函数，输出为一个接口out_port(保持常连接的情况）
	int processFlow(Packet & p, unsigned short inport, bool isSegArrived, QTcpSocket* insocket);

//加密，包括源用自己的私钥去给每一个路由信息签名
	void encrypt(Packet& p, unsigned short inport ,unsigned short outport,int& time);

//解密，包括用源的公钥去解密源的签名
	void decryptCo(Packet& p, unsigned short inport ,unsigned short outport,int& time);
	void decryptPort(Packet& p, unsigned short inport );

//PL//判断是否本节点目标节点
	bool isArrived(Packet & p, unsigned short inport, bool & isSegArrived);

//PL---//计算下一跳，用于二/三维空间时
	Node calculateNextHop(Node thisNode, int outport);
//找到相应密钥
	void getFilename(QString s,QString& file_1,QString& file_2);

//判断指定一个节点是否可以转发
	bool isValidate(Node next);

public:
	int* temp_des;
	Node localnode_r;
	SocketWrite* socketWrite_r;

};

#endif /* ROUTE_H_ */
